package com.opcode.nebulamobil.base.fragments.dialogfragments;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.opcode.nebulamobil.R;
import com.opcode.nebulamobil.base.activities.FragmentActivityBase;
import com.opcode.nebulamobil.base.components.ButtonBase;
import com.opcode.nebulamobil.base.components.EditTextBase;
import com.opcode.nebulamobil.base.interfaces.OnButtonBaseClickListener;
import com.opcode.nebulamobil.information.ApplicationInfo;
import com.opcode.nebulamobil.information.dataforms.costadataforms.SettingsDataForm;
import com.opcode.nebulamobil.utility.JsonConverter;
import com.opcode.nebulamobil.utility.STSFileManager;


/**
 * Uygulamanın ip ve port bilgilerinin değiştirilmek istendilinde bu dialog açılır.
 * @author Okan ERDOĞAN
 *
 * 26 Tem 2014
 */
public class SettingsDialogFragment extends DialogFragmentBase{

	//Referanslar
	private View vi;
	private EditTextBase serverIpSettingsEdittext,serverPortSettingsEdittext;
	private ButtonBase saveSettingsButton;
	private SettingsDataForm settingsInfo;
	
	
	/**
	 * Ayarlar ekranına ait nesneler burada oluşturulurlar.
	 * Bu nesnelerden ip ve port bilgileri elde edildikten sonra kaydet butonuna basılarak yeni ip ve port bilgileri dosyaya ve sharedpreferences'a kayıt edilir.
	 * Ayrıca yeni bilgiler ile bağlantı talebi gönderilir.
	 */
	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
		this.vi = inflater.inflate(R.layout.settings_dialog_fragment_layout, container,false);
		
		this.settingsInfo=new SettingsDataForm();
		this.serverIpSettingsEdittext=(EditTextBase) this.vi.findViewById(R.id.server_ip_settings_edittext);
		this.serverPortSettingsEdittext=(EditTextBase) this.vi.findViewById(R.id.server_port_settings_edittext);
		this.saveSettingsButton=(ButtonBase) this.vi.findViewById(R.id.save_settings_button);
		
		this.saveSettingsButton.setOnButtonBaseClickListener(new OnButtonBaseClickListener() {
			
			@Override
			public void onButtonBaseClick(View v) {
				settingsInfo.setServerIp(serverIpSettingsEdittext.getText().toString());
				settingsInfo.setServerPort(Integer.parseInt(serverPortSettingsEdittext.getText().toString()));
				
				((FragmentActivityBase)getActivity()).createSharedPreferencesManager("sharedpreferences",getActivity());
				((FragmentActivityBase)getActivity()).writeToSharedPreferences("settingsInfo", JsonConverter.toJsonString(settingsInfo));
								
				STSFileManager.getFileOperator().writer(""+settingsInfo.getServerIp()+":"+settingsInfo.getServerPort());
				if(ApplicationInfo.getTryConnectionCommandListener()!=null){
					ApplicationInfo.getTryConnectionCommandListener().tryConnectionAgain();
				}
				dismiss();
			}
		});
		return this.vi;
	}
	
	
	/**
	 * Ayarlar ekranı ilk açıldığında daha önceden kayıt edilmiş olan ip ve port bilgileri elde edilir.
	 * Bu bilgiler daha önceden sharedpreferences'a yazılmıştır.
	 */
	public void onStart(){
		super.onStart();
		
		((FragmentActivityBase)getActivity()).createSharedPreferencesManager("sharedpreferences",getActivity());
		String settingsDataFormAsJson=((FragmentActivityBase)getActivity()).readFromSharedPreferences("settingsInfo", null);	
		SettingsDataForm settingsDataFormInfo=(SettingsDataForm) JsonConverter.fromJsonString(settingsDataFormAsJson, SettingsDataForm.class);
		
		
		if(settingsDataFormInfo!=null){
			serverIpSettingsEdittext.setText(settingsDataFormInfo.getServerIp());
			serverPortSettingsEdittext.setText(""+settingsDataFormInfo.getServerPort());
		}
	}


}
